/**
 * @author Andre Lisson, Patrick Fiedler
 * @version Eclipse 3.6
 * @since 27.05.2011
 * letzte Aenderung: 04.07.2011
 * 
 * Beschreibung: Dialog um Kundendaten zu bearbeiten
 *  
 */

package gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

import kunde.AKunde;
import kunde.Adresse;
import kunde.Endverbraucher;
import kunde.GesellschaftMLiz;
import kunde.Grossverbraucher;
import kunde.Kundenverwaltung;

public class KundenDatenDialog extends JDialog {
// Attribute
	private AKunde kunde = null;
	private BestellsystemGUI bg;
	private JComboBox cbKundenart = new JComboBox();
	private JLabel[] jlBeschreibung;
	private JTextField[] tfStammdaten;
	private boolean neu = false;

// Constructor
	public KundenDatenDialog(BestellsystemGUI bg) {
		this(bg, null);
		this.neu = true;
	}

	public KundenDatenDialog(BestellsystemGUI bg, AKunde kunde) {
		this.setSize(250, 250);
		this.setAlwaysOnTop(true);
		this.setVisible(true);
		this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		this.kunde = kunde;
		this.bg = bg;

		bg.setVisible(false);
		if (this.kunde != null) {
			this.setTitle("Kunde " + kunde.getKundenart());
			cbKundenart.setEnabled(false);
		} else {
			this.setTitle("Kunde anlegen");
		}

		Container cpane = this.getContentPane();
		BorderLayout borderLayout = new BorderLayout();
		cpane.setLayout(borderLayout);
		JPanel panel_mitte = new JPanel();
		cpane.add(panel_mitte, BorderLayout.WEST);
		GridBagLayout gbLayout = new GridBagLayout();
		panel_mitte.setLayout(gbLayout);
		GridBagConstraints constrCenter = new GridBagConstraints();
		constrCenter.anchor = GridBagConstraints.WEST;

		JLabel lbKundenArt = new JLabel("Kundenart");
		constrCenter.gridx = 10;
		constrCenter.gridy = 10;
		panel_mitte.add(lbKundenArt, constrCenter);

		cbKundenart.addItem("Endverbraucher");
		cbKundenart.addItem("Grossverbraucher");
		cbKundenart.addItem("Gesellschaft mit Lizenz");
		constrCenter.gridx = 20;
		constrCenter.gridy = 10;
		panel_mitte.add(cbKundenart, constrCenter);

		String[] BeschreibungInhalt = new String[] { "Nummer", "Name", "Strasse_hnr", "Ort", "Plz", "Status", "Vertrieb", "Bonitaet" };
		jlBeschreibung = new JLabel[BeschreibungInhalt.length];
		tfStammdaten = new JTextField[BeschreibungInhalt.length];

		for (int i = 0; ((i < tfStammdaten.length) && (i < jlBeschreibung.length)); i++) {
			jlBeschreibung[i] = new JLabel(BeschreibungInhalt[i]);
			constrCenter.gridx = 10;
			constrCenter.gridy = 20 + (10 * i);
			panel_mitte.add(jlBeschreibung[i], constrCenter);
			tfStammdaten[i] = new JTextField("");
			constrCenter.gridx = 20;
			constrCenter.gridy = 20 + (10 * i);
			tfStammdaten[i].setPreferredSize(new Dimension(159, 20));
			panel_mitte.add(tfStammdaten[i], constrCenter);
		}
		tfStammdaten[0].setEditable(false);

		if (this.kunde != null) {
			tfStammdaten[0].setText(kunde.getNummer());
			tfStammdaten[1].setText(kunde.getAnschrift().getName());
			tfStammdaten[2].setText(kunde.getAnschrift().getStrasse_hnr());
			tfStammdaten[3].setText(kunde.getAnschrift().getOrt());
			tfStammdaten[4].setText(kunde.getAnschrift().getPlz());
			if (kunde.getKundenart().equals("Endverbraucher")) {
				cbKundenart.setSelectedIndex(0);
				tfStammdaten[7].setText("");
			} else if (kunde.getKundenart().equals("Grossverbraucher")) {
				cbKundenart.setSelectedIndex(1);
				tfStammdaten[5].setText("");
			} else {
				cbKundenart.setSelectedIndex(2);
				tfStammdaten[6].setText("");
			}
		}

		JButton btSave = new JButton("save");
		btSave.addActionListener(new MyActionListener());
		constrCenter.gridx = 20;
		constrCenter.gridy = 100;
		constrCenter.anchor = GridBagConstraints.EAST;
		panel_mitte.add(btSave, constrCenter);
		constrCenter.anchor = GridBagConstraints.WEST;
	}

// Setter and Getter

// other Methods
	public void dispose() {
		bg.setVisible(true);
		super.dispose();
	}

// inner Class
	class MyActionListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			try {
				if (kunde == null) {
					if (cbKundenart.getSelectedIndex() == 2) {
						kunde = Kundenverwaltung.getInstanz().neuGesellschaftMLiz();
					} else if (cbKundenart.getSelectedIndex() == 1) {
						kunde = Kundenverwaltung.getInstanz().neuGrossverbraucher();
					} else {
						kunde = Kundenverwaltung.getInstanz().neuEndverbraucher();
					}
				}
				Adresse anschrift = new Adresse(tfStammdaten[1].getText(), tfStammdaten[2].getText(), tfStammdaten[3].getText(), tfStammdaten[4].getText());
				kunde.setAnschrift(anschrift);
				if (kunde.getKundenart().equals("Endverbraucher")) {
					Endverbraucher ev = (Endverbraucher) kunde;
					ev.setBonitaet(false);
					if (tfStammdaten[7].getText().equals("true") || tfStammdaten[7].getText().equals("True") || tfStammdaten[7].getText().equals("1")) {
						ev.setBonitaet(true);
					}
					kunde = ev;
				} else if (kunde.getKundenart().equals("Grossverbraucher")) {
					Grossverbraucher gv = (Grossverbraucher) kunde;
					if (!tfStammdaten[5].getText().equals("")) {
						gv.setStatus(Integer.valueOf(tfStammdaten[5].getText()));
					}
					kunde = gv;
				} else {
					GesellschaftMLiz gml = (GesellschaftMLiz) kunde;
					if (!tfStammdaten[6].getText().equals("")) {
						gml.setVertrieb(Integer.valueOf(tfStammdaten[6].getText()));
					}
					kunde = gml;
				}
				System.out.println(Kundenverwaltung.getInstanz().getKunde(kunde.getNummer()).toString());
			} catch (Exception ex) {
				System.out.println("Fehler bei der Eingabe" + ex);
			}
			if (neu) {
				bg.kundenListeAdd();
			} else {
				bg.kundenListeChange();
			}
			dispose();

		}
	}
}
